Filter Class Result

= 70) return ['grade' => 'A', 'class' => 'grade-A']; elseif ($score >= 60) return ['grade' => 'B', 'class' => 'grade-B']; elseif ($score >= 55) return ['grade' => 'C', 'class' => 'grade-C']; elseif ($score >= 50) return ['grade' => 'D', 'class' => 'grade-D']; else return ['grade' => 'F', 'class' => 'grade-F']; } // Function to abbreviate subject name function abbreviateSubject($subject) { // Take first 3 letters, uppercase $abbrev = strtoupper(substr(trim($subject), 0, 3)); // Special cases for common subjects $special_cases = [ 'MATHEMATICS' => 'MAT', 'ENGLISH' => 'ENG', 'PHYSICS' => 'PHY', 'CHEMISTRY' => 'CHE', 'BIOLOGY' => 'BIO', 'GEOGRAPHY' => 'GEO', 'HISTORY' => 'HIS', 'LITERATURE' => 'LIT', 'ECONOMICS' => 'ECO', 'ACCOUNTING' => 'ACC', 'COMMERCE' => 'COM', 'GOVERNMENT' => 'GOV', 'CRS' => 'CRS', 'IRS' => 'IRS', 'FRENCH' => 'FRE', 'AGRICULTURE' => 'AGR', 'COMPUTER' => 'COM', 'TECHNICAL' => 'TEC', 'PHYSICAL' => 'PE', 'CIVIC' => 'CIV', 'SOCIAL' => 'SOC', ]; $subject_upper = strtoupper(trim($subject)); foreach ($special_cases as $full => $abbr) { if (strpos($subject_upper, $full) === 0) { return $abbr; } } return $abbrev; } if(isset($_POST['filter'])) { $acyear = $_POST['acyear']; $term = $_POST['term']; $klass = $_POST['klass']; try { // Get students with names from students_info table $students_query = "SELECT DISTINCT m.regno, s.fullname FROM marks m LEFT JOIN students_info s ON m.regno = s.regno WHERE m.acyear = ? AND m.term = ? AND m.klass = ? ORDER BY s.fullname"; $students_stmt = $DBcon->prepare($students_query); $students_stmt->execute([$acyear, $term, $klass]); $students = $students_stmt->fetchAll(PDO::FETCH_ASSOC); // Get subjects $subjects_query = "SELECT DISTINCT subject FROM marks WHERE acyear = ? AND term = ? AND klass = ? ORDER BY subject"; $subjects_stmt = $DBcon->prepare($subjects_query); $subjects_stmt->execute([$acyear, $term, $klass]); $subjects = $subjects_stmt->fetchAll(PDO::FETCH_ASSOC); if(count($students) > 0 && count($subjects) > 0) { $total_subjects = count($subjects); // Calculate totals and averages for all students first $student_data = []; foreach($students as $student) { $regno = $student['regno']; $total_score = 0; // Calculate total score for this student across ALL subjects foreach($subjects as $subject) { $mark_query = $DBcon->prepare("SELECT test, exam FROM marks WHERE regno = ? AND subject = ? AND acyear = ? AND term = ? AND klass = ?"); $mark_query->execute([$regno, $subject['subject'], $acyear, $term, $klass]); $mark = $mark_query->fetch(PDO::FETCH_ASSOC); if($mark) { $total_score += $mark['test'] + $mark['exam']; } } // Calculate average based on total number of subjects offered by class $average = $total_subjects > 0 ? $total_score / $total_subjects : 0; $student_data[] = [ 'regno' => $regno, 'fullname' => $student['fullname'], 'total_score' => $total_score, 'average' => $average ]; } // Sort students by average (descending) for position usort($student_data, function($a, $b) { return $b['average'] <=> $a['average']; }); // Assign positions (handle ties) $student_positions = []; $current_position = 1; $previous_average = null; foreach($student_data as $index => $student) { if($previous_average !== null && $student['average'] < $previous_average) { $current_position = $index + 1; } $student_positions[$student['regno']] = $current_position; $previous_average = $student['average']; } ?>

Class Result Sheet

prepare($students_query); $students_display->execute([$acyear, $term, $klass]); $students_for_display = $students_display->fetchAll(PDO::FETCH_ASSOC); foreach($students_for_display as $student): $regno = $student['regno']; $position = $student_positions[$regno] ?? '-'; $position_class = ''; if($position == 1) $position_class = 'position-1'; elseif($position == 2) $position_class = 'position-2'; elseif($position == 3) $position_class = 'position-3'; // Calculate this student's total for display $student_total = 0; foreach($subjects as $subject) { $mark_query = $DBcon->prepare("SELECT test, exam FROM marks WHERE regno = ? AND subject = ? AND acyear = ? AND term = ? AND klass = ?"); $mark_query->execute([$regno, $subject['subject'], $acyear, $term, $klass]); $mark = $mark_query->fetch(PDO::FETCH_ASSOC); if($mark) { $student_total += $mark['test'] + $mark['exam']; } } // Get the pre-calculated average $student_average = 0; foreach($student_data as $data) { if($data['regno'] == $regno) { $student_average = $data['average']; break; } } // Get overall grade $overall_grade_info = getGrade($student_average); $overall_grade = $overall_grade_info['grade']; $overall_grade_class = $overall_grade_info['class']; ?> prepare("SELECT test, exam FROM marks WHERE regno = ? AND subject = ? AND acyear = ? AND term = ? AND klass = ?"); $mark_query->execute([$regno, $subject['subject'], $acyear, $term, $klass]); $mark = $mark_query->fetch(PDO::FETCH_ASSOC); if($mark): $test = $mark['test']; $exam = $mark['exam']; $subject_total = $test + $exam; ?>
STUDENT
(Reg No)
TOTAL AVG GRD POS
T E TOT
20) { echo substr($name, 0, 18) . '...'; } else { echo $name; } ?>
- - -
No results found for the selected criteria.
'; } } catch(PDOException $e) { echo '
Database error: ' . htmlspecialchars($e->getMessage()) . '
'; } } ?>